package Demo1;

class SingletonLazy{
//    懒汉式    并非立刻创建实例
    private static volatile SingletonLazy instance = null;
    private static Object locker = new Object();

    public static SingletonLazy getInstance() {
        // 首先检查实例是否已经存在
        if (instance == null) {
//            第一个 if 判定是是否要加锁
            // 如果 instance 为 null，说明是首次调用，需要考虑线程安全问题，需要加锁
            synchronized (locker) {
                // 再次检查实例是否为 null，因为可能在此期间已经被其它线程创建
                if (instance == null) {
//                    第二个 if 判定是否要创建对象
                    // 如果实例仍为 null，则创建新的单例对象
                    instance = new SingletonLazy();
                }
            }
        }
        // 返回单例对象实例
        return instance;
    }
    private SingletonLazy(){
//       私有构造方法
    }
}
public class T22 {
    public static void main(String[] args) {

    }
}
